package org.nfIt.task;

import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.nfIt.entity.order.OrderStatistics;
import org.nfIt.mapper.OrderInfoMapper;
import org.nfIt.mapper.OrderStatisticsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * ClossName:OrderStatisticsTask
 * Pakage:org.nfIt.task
 * Description
 *
 *
 * 统计订单的当天日期的总金额
 * 定义一个定时任务每天凌晨2点查询结果
 *
 * @Author L
 * @Create 2024/9/9 19:47
 * @Version 2023.1.3
 */
@Component
@Slf4j
public class OrderStatisticsTask {

    @Autowired
    private OrderInfoMapper orderInfoMapper;

    @Autowired
    private OrderStatisticsMapper orderStatisticsMapper;

    /**
     * 注解@Scheduled + cron表达式
     * 定义定时任务，使用@Scheduled注解指定调度时间表达式
     * cron - 表达式设置执行规则
     *每隔5秒执行一遍
     */
//    @Scheduled(cron = "0/5 * * * * ?")
//    public void helloWorldTask() {
//        System.out.println(new Date().toInstant());
//        log.info("HelloWorld");
//    }


    /**
     * 定义一个定时任务每天凌晨2点查询前一天的统计数据,把统计之后的数据添加统计结果表里面
     *
     * 秒 、分 、时 、日 、月 、周(星期) 、年份
     * (cron = "0 0 2 * * ? *") - 不能跨年定义执行,所以去除？后的 * 号,变为 (cron = "0 0 2 * * ?")
     */
    @Scheduled(cron = "0 0 2 * * ?")
//    @Scheduled(cron = "0/5 * * * * ?") //TODD 为了测试
    public void orderTotalAmountStatistics() {
        //1）DateUtil.offsetDay(new Date(), -1) - 获取前一天的日期
        String createTime = DateUtil.offsetDay(new Date(), -1)
                //转换为年月日时间格式
                .toString(new SimpleDateFormat("yyyy-MM-dd"));
        System.out.println("获取前一天的日期:"+createTime);

        //2）根据前一天日期进行统计功能（分组操作）统计前一天的交易金额
        OrderStatistics orderStatistics = orderInfoMapper.selectOrderStatistics(createTime);

        //3）把统计之后的数据,添加到统计结果的表里
        if(orderStatistics != null) {
            orderStatisticsMapper.insert(orderStatistics) ;
        }
    }

}

